/**
 *********************************************************
 ** <h1>SFMLex - Simple and Fast Multimedia Library Extensions.</h1>
 ** SFMLex Copyright (C) 2008 Neil Johnson (neil@emailus.me.uk)
 **
 ** SFML - Simple and Fast Multimedia Library
 ** Copyright (C) 2007-2008 Laurent Gomila (laurent.gom@gmail.com)
 **
 ** This software is provided 'as-is', without any express or implied warranty.
 ** In no event will the authors be held liable for any damages arising from the use of this software.
 **
 ** Permission is granted to anyone to use this software for any purpose,
 ** including commercial applications, and to alter it and redistribute it freely,
 ** subject to the following restrictions:
 **
 ** 1. The origin of this software must not be misrepresented;
 **    you must not claim that you wrote the original software.
 **    If you use this software in a product, an acknowledgment
 **    in the product documentation would be appreciated but is not required.
 **
 ** 2. Altered source versions must be plainly marked as such,
 **    and must not be misrepresented as being the original software.
 **
 ** 3. This notice may not be removed or altered from any source distribution.
 **
 ************************************************************
 */
#include "c_MusicResource.h"


namespace sfx
{
   c_MusicResource::c_MusicResource( c_ResourceMgr* ResourceMgr ) : 
   c_Resource( ResourceMgr ),
   m_FileName(),
   m_SFML_Music(0)
   {
      //Register support parameter functions
      m_Map.insert( make_pair("filename", t_SetResouceFunc( boost::bind( &c_MusicResource::setFileName, boost::ref(*this), _1 ) ) ) );
   }

   c_MusicResource::~c_MusicResource()
   {
      purge();
   }
   
   bool c_MusicResource::cache( void )
   {
      if( m_SFML_Music == 0 )
      {
         m_SFML_Music = new sf::Music();
         assert( m_SFML_Music != 0 );

         if( m_SFML_Music )
         {
            if( m_SFML_Music->OpenFromFile( m_FileName ) == false )
            {
               delete m_SFML_Music;
               m_SFML_Music = 0;
            }
         }
      }

      return m_SFML_Music ? true : false;
   }

   bool c_MusicResource::purge( void )
   {
      if( m_SFML_Music )
      {
         delete m_SFML_Music;
         m_SFML_Music = 0;
      }
      
      return true;
   }
   
   sf::Music* c_MusicResource::getMusic( void )
   {
      if( m_SFML_Music == 0 )
      {
         cache();
      }

      return m_SFML_Music;
   }
   
}
